package cn.tedu.knows.sys.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class DemoAdvice {

    //定义切面
    //这个切面定义到cn.tedu.knows.sys.controller.AuthController.demo
    @Pointcut("execution(" +
      "public * cn.tedu.knows.sys.controller.AuthController.demo(..))")
    //下面要定义一个方法,这个方法没有运行意义
    // 单纯的就是需要这个方法名做切面名称
    public void pointCut(){ }

    //对切面方法添加通知
    //添加前置通知,意思是在切面代表的方法运行之前运行
    @Before("pointCut()")
    public void before(){
        System.out.println("前置通知执行");
    }

    //后置通知
    @After("pointCut()")
    public void after(){
        System.out.println("后置通知执行");
    }
    //异常通知
    @AfterThrowing("pointCut()")
    public void throwing(){
        System.out.println("发生异常了!!");
    }
    // 环绕通知
    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint)
                                            throws Throwable {
        System.out.println("环绕通知:方法运行前");
        //放行运行目标方法
        Object o =joinPoint.proceed();
        System.out.println("环绕通知:方法运行后");
        return o;
    }



}
